import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';

/// 根据文件扩展名返回对应的 [IconData] 图标。
///
/// 功能：
/// - 提供一套常见文件类型 → 图标的映射规则；
/// - 支持源码、标记/样式、文档、图片、音频、视频、压缩包、配置文件、数据库、字体、安装包、3D 模型、证书等；
/// - 未匹配到时返回通用的 [Icons.insert_drive_file]。
///
/// 参数：
/// - [name] 文件名（大小写不敏感，会按 `.` 切分获取扩展名）；
///
/// 返回值：
/// - 对应扩展名的 [IconData]；
/// - 未匹配时为 [Icons.insert_drive_file]。
///
/// 使用示例：
/// ```dart
/// final icon = defaultFileIcon('main.dart');
/// // => 返回 Dart 语言图标
///
/// final imgIcon = defaultFileIcon('logo.png');
/// // => 返回图片文件图标
/// ```
IconData defaultFileIcon(String name) {
  final ext = name.toLowerCase().split('.').last;

  switch (ext) {
  // ── 彩蛋示例 ──
    case 'snow':
      return CupertinoIcons.snow;
    case 'cloud':
      return CupertinoIcons.cloud_fill;
    case 'ice':
      return CupertinoIcons.wind_snow;
    case 'water':
      return Icons.water_drop;

  // ── 源码 ──
    case 'dart':
      return MdiIcons.fromString('language-dart') ?? Icons.code;
    case 'js':
      return MdiIcons.languageJavascript;
    case 'jsx':
    case 'tsx':
      return MdiIcons.react;
    case 'ts':
      return MdiIcons.languageTypescript;
    case 'py':
      return MdiIcons.languagePython;
    case 'java':
      return MdiIcons.languageJava;
    case 'kt':
      return MdiIcons.languageKotlin;
    case 'swift':
      return MdiIcons.languageSwift;
    case 'c':
    case 'h':
    case 'm': // Objective-C
      return MdiIcons.languageC;
    case 'cpp':
    case 'hpp':
    case 'mm': // Objective-C++
      return MdiIcons.languageCpp;
    case 'cs':
      return MdiIcons.languageCsharp;
    case 'go':
      return MdiIcons.languageGo;
    case 'php':
      return MdiIcons.languagePhp;
    case 'rb':
      return MdiIcons.languageRuby;
    case 'rs':
      return MdiIcons.languageRust;
    case 'lua':
      return MdiIcons.languageLua;
    case 'sh':
    case 'bat':
    case 'ps1':
      return MdiIcons.consoleLine;
    case 'r':
      return MdiIcons.languageR;

  // ── 标记 / 样式 ──
    case 'html':
    case 'htm':
      return MdiIcons.languageHtml5;
    case 'css':
    case 'scss':
      return MdiIcons.languageCss3;
    case 'xml':
      return MdiIcons.fileXmlBox;

  // ── 文档 ──
    case 'pdf':
      return MdiIcons.filePdfBox;
    case 'doc':
    case 'docx':
    case 'odt':
      return MdiIcons.fileWordBox;
    case 'txt':
      return MdiIcons.fileDocumentOutline;
    case 'md':
    case 'markdown':
      return MdiIcons.languageMarkdown;
    case 'ppt':
    case 'pptx':
    case 'odp':
      return MdiIcons.filePowerpointBox;
    case 'xls':
    case 'xlsx':
    case 'ods':
      return MdiIcons.fileExcelBox;
    case 'csv':
      return MdiIcons.fileDelimited;

  // ── 图片 ──
    case 'png':
    case 'jpg':
    case 'jpeg':
    case 'gif':
    case 'bmp':
    case 'webp':
    case 'tiff':
      return MdiIcons.fileImage;
    case 'svg':
      return MdiIcons.vectorSquare;

  // ── 音频 ──
    case 'mp3':
    case 'wav':
    case 'flac':
    case 'aac':
    case 'ogg':
    case 'm4a':
      return MdiIcons.fileMusic;

  // ── 视频 ──
    case 'mp4':
    case 'mov':
    case 'mkv':
    case 'avi':
    case 'wmv':
    case 'flv':
    case 'webm':
      return MdiIcons.fileVideo;

  // ── 压缩 ──
    case 'zip':
    case 'rar':
    case '7z':
    case 'tar':
    case 'gz':
    case 'bz2':
      return MdiIcons.folderZip;

  // ── 配置 / 数据 ──
    case 'json':
    case 'yaml':
    case 'yml':
    case 'ini':
    case 'toml':
      return MdiIcons.fileCog;

  // ── 数据库 ──
    case 'sql':
    case 'db':
      return MdiIcons.database;

  // ── 字体 ──
    case 'ttf':
    case 'otf':
    case 'woff':
    case 'woff2':
      return MdiIcons.formatFont;

  // ── 可执行 / 包 ──
    case 'exe':
    case 'msi':
    case 'deb':
    case 'rpm':
      return MdiIcons.application;
    case 'apk':
      return MdiIcons.android;
    case 'ipa':
      return MdiIcons.apple;

  // ── 3D / CAD ──
    case 'obj':
    case 'fbx':
    case 'stl':
    case 'dae':
      return MdiIcons.cube;

  // ── 证书 / 密钥 ──
    case 'pem':
    case 'cer':
    case 'crt':
      return MdiIcons.key;
  }

  // 默认文件图标
  return Icons.insert_drive_file;
}
